package pkg

import (
	"context"
	"fastdp-ops/cmd/agent/zaplog"
	"fastdp-ops/pkg/agent/utils"
	pb "fastdp-ops/proto/machine" // 替换为你的 proto 包路径
	"go.uber.org/zap"
)

// 实现 K8sDeployService 接口（必须实现 proto 定义的所有方法）
type AgentServer struct {
	pb.UnimplementedMachineEnvServiceServer
}

// 实现单个组件部署接口
func (s *AgentServer) GetMachineEnv(ctx context.Context, req *pb.EnvRequest) (*pb.EnvResponse, error) {
	zaplog.Logger.Info("收到机器环境信息查询请求",
		zap.String("machine_id", req.MachineId),
		zap.Strings("info_types", req.InfoTypes),
	)

	envInfo, err := utils.GetRealEnvInfo()
	if err != nil {
		zaplog.Logger.Sugar().Errorf("GetRealEnvInfo err: %v", err)
		return &pb.EnvResponse{
			Success: false,
			Message: err.Error(),
			EnvInfo: nil,
		}, err
	}

	// （可选逻辑：根据req.InfoTypes剔除不需要的信息，减少传输量）
	filteredEnvInfo := filterEnvInfo(envInfo, req.InfoTypes)

	return &pb.EnvResponse{
		MachineId: req.MachineId,
		Success:   true,
		Message:   "",
		EnvInfo:   filteredEnvInfo,
	}, nil
}

// 按需过滤不需要的信息类型（可选实现）
func filterEnvInfo(envInfo *pb.MachineEnvInfo, infoTypes []string) *pb.MachineEnvInfo {
	if len(infoTypes) == 0 {
		return envInfo // 无筛选条件，返回全部
	}

	// 复制原始数据（避免修改原对象）
	filtered := &pb.MachineEnvInfo{
		Hostname: envInfo.Hostname,
		Uptime:   envInfo.Uptime,
	}

	// 根据info_types保留需要的字段
	for _, typ := range infoTypes {
		switch typ {
		case "os":
			filtered.Os = envInfo.Os
		case "cpu":
			filtered.Cpu = envInfo.Cpu
		case "memory":
			filtered.Memory = envInfo.Memory
		case "disk":
			filtered.Disks = envInfo.Disks
		}
	}
	return filtered
}
